package rootdb

import (
	"errors"
	"os"
	"sync"
	"time"

	"gitee.com/xiaoyutab/xgotool/xgodb"
)

var now_file_path_lock sync.Mutex

// 获取当前可写的文件位置
func GetPath() (string, error) {
	now_file_path_lock.Lock()
	defer now_file_path_lock.Unlock()
	conn, err := Connect()
	if err != nil {
		return "", err
	}
	// 获取最新文件名
	f := File{}
	err = conn.Table(f.TableName()).Order("id DESC").Limit(1).Find(&f).Error
	if err != nil {
		return "", err
	}
	if f.Id > 0 {
		// 如果找到了最新的日志文件，就判断该文件大小
		inf, err := os.Stat(f.Path)
		if err != nil {
			return "", err
		}
		f.FileSize = inf.Size()
		// 如果不满足拆分，就直接返回该路径
		if f.FileSize < xgodb.GetInt("RUN_FILE_SIZE") {
			go conn.Table(f.TableName()).Save(&f)
			return f.Path, nil
		}
		// 回写最大ID
		f.MinId, f.MaxId = SqliteMaxMin(f.Path)
		go conn.Table(f.TableName()).Save(&f)
	}
	name, path := getNewName(".db")
	if path == "" {
		return "", errors.New("文件路径获取失败")
	}
	files := File{
		Id:    time.Now().UnixNano(),
		Name:  name,
		MinId: time.Now().UnixNano(),
		Path:  path,
	}
	// 回写到数据库中
	err = conn.Table(f.TableName()).Save(&files).Error
	if err != nil {
		return "", err
	}
	return path, nil
}
